/**
 * 统一日志工具
 * 根据环境控制日志输出，生产环境自动禁用调试日志
 */

export enum LogLevel {
  DEBUG = 0,
  INFO = 1,
  WARN = 2,
  ERROR = 3
}

class Logger {
  private level: LogLevel;
  private isDev: boolean;

  constructor() {
    this.isDev = import.meta.env.DEV;
    // 开发环境显示所有日志，生产环境只显示警告和错误
    this.level = this.isDev ? LogLevel.DEBUG : LogLevel.WARN;
  }

  /**
   * 设置日志级别
   */
  setLevel(level: LogLevel) {
    this.level = level;
  }

  /**
   * 调试日志（开发环境）
   */
  debug(message: string, ...args: any[]) {
    if (this.level <= LogLevel.DEBUG && this.isDev) {
      console.log(`[DEBUG] ${message}`, ...args);
    }
  }

  /**
   * 信息日志
   */
  info(message: string, ...args: any[]) {
    if (this.level <= LogLevel.INFO) {
      console.info(`[INFO] ${message}`, ...args);
    }
  }

  /**
   * 警告日志
   */
  warn(message: string, ...args: any[]) {
    if (this.level <= LogLevel.WARN) {
      console.warn(`[WARN] ${message}`, ...args);
    }
  }

  /**
   * 错误日志
   */
  error(message: string, ...args: any[]) {
    if (this.level <= LogLevel.ERROR) {
      console.error(`[ERROR] ${message}`, ...args);
    }
  }

  /**
   * 分组日志（开发环境）
   */
  group(label: string) {
    if (this.isDev) {
      console.group(label);
    }
  }

  /**
   * 结束分组（开发环境）
   */
  groupEnd() {
    if (this.isDev) {
      console.groupEnd();
    }
  }

  /**
   * 表格日志（开发环境）
   */
  table(data: any) {
    if (this.isDev) {
      console.table(data);
    }
  }

  /**
   * 开发环境专用日志（仅在开发环境显示）
   */
  dev(message: string, ...args: any[]) {
    if (this.isDev) {
      console.log(`[DEV] ${message}`, ...args);
    }
  }

  /**
   * 生产环境错误日志（始终显示）
   */
  prodError(message: string, ...args: any[]) {
    console.error(`[PROD_ERROR] ${message}`, ...args);
  }
}

// 导出单例实例
export const logger = new Logger();

// 导出便捷方法
export const { debug, info, warn, error, group, groupEnd, table, dev, prodError } = logger;
